/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package gui.relatorios;

import bin.StringTable;
import bin.Venda;
import bin.clientes.Cliente;
import bin.move.Expedicao;
import gui.JanelaPrincipal;
import java.util.ArrayList;
import java.util.List;
import javax.swing.DefaultListModel;
import javax.swing.DefaultListSelectionModel;
import javax.swing.ListModel;

/**
 *
 * @author Vinicius
 */
public class RelatorioVendasCliente extends javax.swing.JInternalFrame {

    private JanelaPrincipal janelaPrincipal;
    private DefaultListModel<String> listModel;
    
    /**
     * Creates new form RelatorioVendasCliente
     */
    public RelatorioVendasCliente(JanelaPrincipal janelaPrincipal) {
        this.janelaPrincipal = janelaPrincipal;
        
        initComponents();
        
        this.listModel = new DefaultListModel<String>();
        this.listaClientes.setModel(listModel);
        this.adicionarClientesNaLista();
        
        this.txtArea.setContentType("text/html");
    }

    /**
     * This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The content of this method is always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        txtArea = new javax.swing.JEditorPane();
        jScrollPane2 = new javax.swing.JScrollPane();
        listaClientes = new javax.swing.JList();
        btGerar = new javax.swing.JButton();
        jMenuBar1 = new javax.swing.JMenuBar();
        menuFechar = new javax.swing.JMenu();

        setTitle("Relatórios de Vendas por Cliente");

        txtArea.setEditable(false);
        jScrollPane1.setViewportView(txtArea);

        listaClientes.setToolTipText("Ctrl para selecionar vários");
        jScrollPane2.setViewportView(listaClientes);
        listaClientes.getAccessibleContext().setAccessibleDescription("");

        btGerar.setText("Gerar");
        btGerar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btGerarActionPerformed(evt);
            }
        });

        menuFechar.setText("Fechar");
        menuFechar.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                menuFecharMouseClicked(evt);
            }
        });
        jMenuBar1.add(menuFechar);

        setJMenuBar(jMenuBar1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 481, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
                    .addComponent(btGerar, javax.swing.GroupLayout.DEFAULT_SIZE, 124, Short.MAX_VALUE))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jScrollPane1)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 453, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btGerar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGap(6, 6, 6))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    /**
     * Botão gerar. Irá gerar o relatorio conforme os clientes selecionados na lista.
     * @param evt 
     */
    private void btGerarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btGerarActionPerformed
        
        List<String> clientesSelecionados = this.listaClientes.getSelectedValuesList();
        if(clientesSelecionados.size() == 0)
        {
            this.consultarTodosClientes();
            return;
        }
        
        List<Integer> listaIds = new ArrayList<Integer>();
        
        for(String t : clientesSelecionados)
        {
            if(t.equals("(Todos)"))
            {
                this.consultarTodosClientes();
                return;
            }
            else
            {
                listaIds.add(Integer.parseInt(t.replaceAll("[^0-9]", "")));
            }
        }
        
        this.consultarClientesSelecionados(listaIds);
    }//GEN-LAST:event_btGerarActionPerformed

    /**
     * Liberar a janela para ser aberta novamente e fechar.
     * @param evt 
     */
    private void menuFecharMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_menuFecharMouseClicked
        this.janelaPrincipal.getJanelaFactory().liberarJanela("[Menu, Relatórios, Vendas por Cliente]");
        this.dispose();
    }//GEN-LAST:event_menuFecharMouseClicked

    /**
     * Adicionar clientes na lista para permitir a seleção dos mesmos e gerar o relatório.
     */
    public void adicionarClientesNaLista()
    {
        this.limparLista();
        this.listModel.addElement("(Todos)");
        for(Cliente c : this.janelaPrincipal.getArmazem().getListaClientes())
        {
            this.listModel.addElement(c.getId() + " - " + c.getNome());
        }
    }
    
    /**
     * Limpar a lista de clientes.
     */
    public void limparLista()
    {
        this.listModel.clear();
    }

    /**
     * Consultar todos os clientes.
     */
    public void consultarTodosClientes()
    {
        StringTable strTable = new StringTable();
        strTable.addTitulo("Vendas por clientes - Todos", "#FFEBCD");
        
        for(Venda v : this.janelaPrincipal.getArmazem().getListaVendas())
        {
            strTable.addLinhaDestacada("Cliente: " + v.getCliente().getId() + " - " + v.getCliente().getNome(), "#FAF0E6");
            strTable.addLinha("Data: " + v.getDataVenda() + "<br><br>" + "Itens:<br>");
            for(Expedicao e : v.getListaExpedicao())
            {
                strTable.addText("Item: " + e.getID() + " - " + e.getItem().getNome() + "   Quantidade: " + e.getQtd() + "<br>");
            }
            strTable.addText("<br>Valor Total: " + v.getValorTotal());
        }
        
        this.txtArea.setText(strTable.getStringTable());
    }
    
    /**
     * Consultar todos os clientes selecionados. Deve ser passado um array de ids de clientes.
     * @param id Array de id de clientes para realizar a consulta.
     */
    public void consultarClientesSelecionados(List<Integer> id)
    {
        StringTable strTable = new StringTable();
        strTable.addTitulo("Vendas por clientes", "#FFEBCD");
        
        for(Venda v : this.janelaPrincipal.getArmazem().getListaVendas())
        {
            for(Integer i : id)
            {
                if(i == v.getCliente().getId())
                {
                    strTable.addLinhaDestacada("Cliente: " + v.getCliente().getId() + " - " + v.getCliente().getNome(), "#FAF0E6");
                    strTable.addLinha("Data: " + v.getDataVenda() + "<br><br>" + "Itens:<br>");
                    for(Expedicao e : v.getListaExpedicao())
                    {
                        strTable.addText("Item: " + e.getID() + " - " + e.getItem().getNome() + "   Quantidade: " + e.getQtd() + "<br>");
                    }
                    strTable.addText("<br>Valor Total: " + v.getValorTotal());
                }
            }
        }
        this.txtArea.setText(strTable.getStringTable());
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btGerar;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JList listaClientes;
    private javax.swing.JMenu menuFechar;
    private javax.swing.JEditorPane txtArea;
    // End of variables declaration//GEN-END:variables
}
